package mx.com.mindbits.bandpay.asynctask;

import mx.com.mindbits.bandpay.FingerSignature;
import mx.com.mindbits.bandpay.R;
import mx.com.mindbits.bandpay.business.TransactionBusiness;
import mx.com.mindbits.bandpay.utils.ConstantsValues;
import mx.com.mindbits.bandpay.utils.CustomToastNotification;
import mx.com.mindbits.bandpay.utils.GenericAlert;
import mx.com.mindbits.bandpay.utils.HTTPConnector;
import mx.com.mindbits.bandpay.utils.Utils;
import mx.com.mindbits.bandpay.vo.TAECompraVO;
import mx.com.mindbits.bandpay.vo.TAETransactionResponse;
import mx.com.mindbits.bridge.Blowfish;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

public class PayServicesTask extends AsyncTask<String, Void, TAETransactionResponse>{
	
	private TransactionBusiness transactionBusiness;
	private ProgressDialog progressDialog;
	private Context contexto;
	private TAECompraVO compraVO;
	private TAETransactionResponse taeResponse;
	private HTTPConnector connectorHTTP;
	private String resultado;
	private AlertDialog.Builder estadoTransaccion;
	private Intent stepThree;
	private Bundle receiver;
	private String arqc;
	private String aid;
	//private PropertiesBP properties;
	
	public PayServicesTask(TAECompraVO compraVO, Context contexto, 
			String arqc, String _aid){
		super();
		this.compraVO = compraVO;
		this.contexto = contexto;
		this.arqc = arqc;	
		aid = _aid;
		taeResponse = new TAETransactionResponse();
		//properties = new PropertiesBP(contexto);		
	}
	
	
	
	@Override
	protected void onPreExecute(){
		Log.d(ConstantsValues.TAG_WEB_SERVICE_TASK, "ENTRO A EL ON PRE EXECUTE");
		
		progressDialog = new ProgressDialog (contexto);
		progressDialog.setTitle(R.string.progress_dialog_title1);
		progressDialog.setMessage("Procesando transaccion...");
		progressDialog.setCancelable(false);
		progressDialog.setCanceledOnTouchOutside(false);
		progressDialog.show();
		
		Log.d(ConstantsValues.TAG_WEB_SERVICE_TASK, "GRABANDO BASE DE DATOS...");
		transactionBusiness = new TransactionBusiness(contexto.getApplicationContext());			
		//Insercion de la transaccion (datos de compra) en la base de datos del cliente android			
		transactionBusiness.insertTransaction(compraVO, true);
		
	}
	
	@Override
	protected TAETransactionResponse doInBackground(String... params) {
		Log.d(ConstantsValues.TAG_WEB_SERVICE_TASK, "ENTRO A LA CONEXION TAREA EN SEGUNDO PLANO");
		connectorHTTP = new HTTPConnector();
		if(Utils.internetAvailable(contexto)){
			if (connectorHTTP.checkConnection(contexto)){
				try{
					//resultado = connectorHTTP.connectToURL(ConstantsValues.URL_BRIDGE,params[0]);
					resultado = connectorHTTP.connectToURL(Blowfish.decode(ConstantsValues.URL_ENCODE),params[0]);
					
					Log.i(ConstantsValues.TAG_READER, "url " + Blowfish.decode(ConstantsValues.URL_ENCODE) + 
							"user" + Blowfish.decode(ConstantsValues.USER) + 
							"Id user " + Blowfish.decode(ConstantsValues.ID_USER) + 
							"password" + Blowfish.decode(ConstantsValues.LOGIN) + 
							"Afiliacion" + Blowfish.decode(ConstantsValues.AFILIACION));// properties.loadProperties().
							//getProperty("url_brige") );	

					Log.e(ConstantsValues.TAG_READER, "resultado connect:" + resultado);
					
					if(resultado != null || !resultado.isEmpty()){
						if(!resultado.equals("SIN DATOS...")){
							taeResponse  = transactionBusiness.updateTransactionCommingMW(resultado);
						}
					}
				}catch(Exception e){					
					Log.e(ConstantsValues.TAG_READER, "Error al procesar pago: " + e);	
					taeResponse = null;
				}
			}
		}									
		
		//return error;
		return taeResponse; 
		
	}
	@Override
	protected void onPostExecute(TAETransactionResponse responseCompra){
		progressDialog.dismiss();
		
		estadoTransaccion = new AlertDialog.Builder(contexto);
		estadoTransaccion.create();
		estadoTransaccion.setTitle(R.string.statusDialog_title);
		
		Log.e(ConstantsValues.TAG_READER, "taeResponse: " + taeResponse);
		if(taeResponse != null ){
			if(!taeResponse.getCodigoError().equals(ConstantsValues.MW_TRANSACTION_STORED_SUCCESS)){
				
				Log.i(ConstantsValues.TAG_READER, "VALOR ["+taeResponse.getCodigoError()+"]");
				Log.i(ConstantsValues.TAG_READER, "VALOR ["+taeResponse.getFolio()+"]");
				Log.i(ConstantsValues.TAG_READER, "VALOR ["+taeResponse.getFolioAddcel()+"]");
				Log.i(ConstantsValues.TAG_READER, "VALOR ["+taeResponse.getMensaje()+"]");
				Log.i(ConstantsValues.TAG_READER, "VALOR ["+taeResponse.getResultado()+"]");								
				
				estadoTransaccion.setMessage(responseCompra.getMensaje());//taeResponse.getMensaje().toString());				
				estadoTransaccion.setNeutralButton(android.R.string.ok, null);
				estadoTransaccion.show();						
			}else{
				String mensajeFix = taeResponse.getMensaje().substring(0,
						(taeResponse.getMensaje().length()-4))+taeResponse.getFolioAddcel();
				//estadoTransaccion.setMessage(taeResponse.getMensaje());
				estadoTransaccion.setMessage(mensajeFix);
				estadoTransaccion.setPositiveButton(android.R.string.ok,
						new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int wich ) {
						// TODO Auto-generated method stub
						stepThree = new Intent(contexto, FingerSignature.class);
						receiver = new Bundle();
						receiver.putSerializable("completeSell", compraVO);
						receiver.putString("arqc", arqc);
						receiver.putString("aid", aid);
						stepThree.putExtras(receiver);
						contexto.startActivity(stepThree);
					}
				});
			
				estadoTransaccion.show();
			}
		}else{
			CustomToastNotification.customMessage("No se pudo procesar la solicitud, intentelo mas tarde.",
					contexto).show();  
			
			Log.e(ConstantsValues.TAG_READER, "La soilicitud no fue procesada ");
		}
		
	}//end postexec	
}
